{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.2 神经网络基本原理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上节我们从机器学习中最简单最基础的线性模型开始讲起，介绍了什么是机器学习的算法，怎样用pytorch代码实现。别看它简单，但这种思想却是很多其他算法的基础，神经网络就是其中之一。简单地说，神经网络就是很多个线性模型的组合。我们这节课就来看看它的组成和内部工作原理。\n",
    "\n",
    "神经网络（Neural Network）是一种模拟人脑神经系统功能的计算模型。它由多个节点组成，节点之间通过权重相连，这些节点构成了多个层，每一层节点的输入和输出都是上一层节点的输出，最终输出层的输出即为神经网络的结果。\n",
    "\n",
    "神经网络与人脑的神经系统的结构非常相似。神经元是人脑中最小的功能单位，它可以接收、处理和输出信息，是人脑中信息传递的基本单位。神经元由两个部分组成：输入端和输出端。输入端接收来自其他神经元的输入信息，输出端向其他神经元输出信息。神经元之间的连接叫做突触（Synapse），突触的权重决定了输入信息对输出信息的影响程度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2.1 从线性模型到神经网络"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"../images/4-2-1.png\" width=\"40%\"></img>\n",
    "\n",
    "神经网络由输入层、隐藏层和输出层三部分组成。输入层是接收输入信息的层，隐藏层是对输入信息进行处理的层，输出层是输出结果的层。\n",
    "\n",
    "<img src=\"../images/4-2-2.png\" width=\"30%\"></img>\n",
    "\n",
    "输入层的节点数量等于输入信息的维度，输出层的节点数量等于输出信息的维度。隐藏层的节点数量是由设计者决定的，一般来说，隐藏层节点数量越多，神经网络的表示能力就越强。但同时也要注意，隐藏层节点数量过多会导致训练时间增加，同时也容易导致过拟合。\n",
    "\n",
    "工作过程是这样的：首先，将输入信息送入输入层，然后按照输入层与隐藏层之间的连接权重，将输入信息传递到隐藏层。隐藏层的节点会对输入信息进行加权求和，然后再通过一个非线性激活函数进行转换，最后将处理后的信息输出到下一层。这个过程重复进行直到最后一层，最后一层的输出即为神经网络的最终输出。\n",
    "\n",
    "网络的结构是静态的，但是它的权重是动态的。通过训练，神经网络可以学习输入数据的内在规律，并通过调整权重来改进对输入数据的预测能力。训练过程通常使用反向传播算法（Backpropagation）来实现。这种方法常用于调整神经网络的权重，使得预测的输出与实际的输出尽可能接近。\n",
    "\n",
    "神经网络中的每个节点都是一个线性模型，它将输入数据乘以权重，然后通过一个非线性激活函数进行转换，最后输出一个值。这样，多个线性模型就组合起来，通过调整每个节点的权重和非线性激活函数，可以学习输入数据的复杂关系。\n",
    "\n",
    "神经网络的基本计算公式如下：\n",
    "\n",
    "$\\mathbf{z}^l = \\mathbf{W}^l\\mathbf{a}^{l-1} + \\mathbf{b}^l $\n",
    "\n",
    "$ \\mathbf{a}^l = g(\\mathbf{z}^l) $\n",
    "\n",
    "其中， $\\mathbf{z}^l$是线性输入，$\\mathbf{a}^l$是非线性输出，W权重矩阵，b是偏置向量，g()是非线性激活函数。\n",
    "\n",
    "**从上面的公式可以看出，神经网络中的每一层都是一个线性模型，只是在输出之前经过了一个非线性激活函数的转换。因此，神经网络可以看作是由多个线性模型组合起来的。这也是为什么我们在上节的例子中直接使用了pytorch中全连接层nn.Linear也能解决线性回归问题的原因，本质上它们是一回事儿。**\n",
    "\n",
    "通过组合多个线性模型，神经网络可以模拟人脑的行为，实现更复杂的模式识别和决策过程。\n",
    "\n",
    "神经网络的非线性激活函数是神经网络的重要组成部分，它的作用是在输入数据的基础上进行非线性转换，从而使得神经网络具有更强的表示能力。常用的非线性激活函数包括 Sigmoid 函数、Tanh 函数、ReLU 函数和 Leaky ReLU 函数等。这些先了解就行，我们在后续的课程中还会详细介绍。\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2.2 神经网络和生物学"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "神经网络模型在发展的过程中受到了生物学中神经系统的启发，因此，可以说神经网络与生物学之间有着密切的联系。\n",
    "\n",
    "首先，神经网络的结构受到了生物学中神经元的启发。我们刚刚介绍了，在生物学中，神经元是人脑中最基本的组成单位，它们通过突触连接，形成了复杂的神经网络。在神经网络的模型中，也使用了类似的结构，将输入数据通过权重和偏置进行线性转换，再经过非线性激活函数进行转换，最后输出到下一层。这种结构可以很好地模拟生物学中神经元的行为。\n",
    "\n",
    "其次，神经网络的训练方法也受到了生物学中神经元的启发。在生物学中，神经元的输入和输出之间的权重是可以变化的，当神经元收到足够强的输入信号时，它的输出信号也会变强。这种机制类似于神经网络的权重调整过程。在训练神经网络时，通过反向传播算法，调整神经网络中各层的权重，使得输出结果与预期结果更加接近。这种机制可以很好地模拟生物学中神经元的调整过程。\n",
    "\n",
    "第三，深度学习的发展过程中，越来越多的研究者寻求生物学理论的启发。比如更简洁高效的网络结构，像循环神经网络、残差神经网络等复杂的模型在研究过程中都或多或少的收到了生物学方面的启发。最新的前向前向传播网络等更伴随着对大脑运行机制的深刻思考。\n",
    "\n",
    "此外，神经网络还可以应用于生物学领域，用于对生物学问题进行模拟和预测。例如，神经网络可以用于预测蛋白质的折叠模式，或者用于预测分子间的相互作用。这些应用都是基于神经网络的表示能力和学习能力，通过输入相应的数据和调整参数，可以得到较为准确的预测结果。\n",
    "\n",
    "总的来说，神经网络与生物学之间有着密切的联系，两个学科看似相隔十万八千里，八竿子打不着，但实际上两个领域的科学家神交已久。其实都是在研究人的大脑思维结构和过程。只不过一个是从生理结构上着手，另一个试图用数学尤其是统计科学建模，然后用计算机编程模拟罢了。在学习深度学习课程的过程中，多了解一些生物学知识，尤其是脑科学方面的最新进展，对于深度学习模型的研究和深入思考无疑会起到四两拨千斤的作用。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[Next 4-3分类问题](./4-3%20分类问题.ipynb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
